// https://www.lintcode.com/problem/string-to-integer-atoi/description
// 54. String to Integer (atoi)
// 实现atoi这个函数，将一个字符串转换为整数。如果没有合法的整数，返回0。如果整数超出了32位整数的范围，返回INT_MAX(2147483647)如果是正整数，或者INT_MIN(-2147483648)如果是负整数。

// 样例
// "10" =>10

// "-1" => -1

// "123123123123123" => 2147483647

// "1.0" => 1


class Solution {
public:
    /**
     * @param str: A string
     * @return: An integer
     */
    int atoi(string &str) {
		str = str.substr(0, str.find('.'));
		string tmp = str;
		int len = str.length();
	    long result = 0; 
 		int sign = '0';
// 		char sign = ''; 引号内至少包含一个字符
		int pos = 0;
		while (str[pos])
		{
		    char cur = str[pos];
		    if (cur == '+' || cur == '-')
		    {
		      //  "  15+4"
		      //  "   +-1111 "
		        if (result == 0 && sign == '0')
		        {
		            sign = cur;
		        }
		        else
		        {
		            break;
		        }
		    }
		    else if (cur < '0' || cur > '9')
		    {
		        if (cur != ' ')
		        {
		            break;
		        }
		    } 
		    else
		    {
		 	    result = result * 10 + cur - '0';  
		    }
		    if (result > INT_MAX)
		    {
		        break; // 防止出现很大的数
		    }
		    pos++;
		}
	    if (sign == '-')
		{
		    result = - 1 * result;
		}
		if (result > INT_MAX)
		{
			result = INT_MAX;
		}
		else if (result < INT_MIN)
		{
			result = INT_MIN;
		}
	
		return result;
	}
};